home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / flight-of-the-museum.swf / scripts / com / google / analytics / external / JavascriptProxy.as < prev   
Encoding:
Text File  |  2011-10-17  |  7.4 KB  |  233 lines

  1. package com.google.analytics.external
  2. {
  3.    import com.google.analytics.debug.DebugConfiguration;
  4.    import flash.external.ExternalInterface;
  5.    import flash.system.Capabilities;
  6.    
  7.    public class JavascriptProxy
  8.    {
  9.       
  10.       public static var setProperty_js:XML = <script>
  11.                 <![CDATA[
  12.                     function( path , value )
  13.                     {
  14.                         var paths;
  15.                         var prop;
  16.                         if( path.indexOf(".") > 0 )
  17.                         {
  18.                             paths = path.split(".");
  19.                             prop  = paths.pop() ;
  20.                         }
  21.                         else
  22.                         {
  23.                             paths = [];
  24.                             prop  = path;
  25.                         }
  26.                         var target = window ;
  27.                         var len    = paths.length ;
  28.                         for( var i = 0 ; i < len ; i++ )
  29.                         {
  30.                             target = target[ paths[i] ] ;
  31.                         }
  32.                         
  33.                         target[ prop ] = value ;
  34.                     }
  35.                 ]]>
  36.             </script>;
  37.       
  38.       public static var hasProperty_js:XML = <script>
  39.                 <![CDATA[
  40.                     function( path )
  41.                     {
  42.                         var paths;
  43.                         if( path.indexOf(".") > 0 )
  44.                         {
  45.                             paths = path.split(".");
  46.                         }
  47.                         else
  48.                         {
  49.                             paths = [path];
  50.                         }
  51.                         var target = window ;
  52.                         var len    = paths.length ;
  53.                         for( var i = 0 ; i < len ; i++ )
  54.                         {
  55.                             target = target[ paths[i] ] ;
  56.                         }
  57.                         if( target )
  58.                         {
  59.                             return true;
  60.                         }
  61.                         else
  62.                         {
  63.                             return false;
  64.                         }
  65.                     }
  66.                 ]]>
  67.             </script>;
  68.       
  69.       public static var setPropertyRef_js:XML = <script>
  70.                 <![CDATA[
  71.                     function( path , target )
  72.                     {
  73.                         var paths;
  74.                         var prop;
  75.                         if( path.indexOf(".") > 0 )
  76.                         {
  77.                             paths = path.split(".");
  78.                             prop  = paths.pop() ;
  79.                         }
  80.                         else
  81.                         {
  82.                             paths = [];
  83.                             prop  = path;
  84.                         }
  85.                         alert( "paths:"+paths.length+", prop:"+prop );
  86.                         var targets;
  87.                         var name;
  88.                         if( target.indexOf(".") > 0 )
  89.                         {
  90.                             targets = target.split(".");
  91.                             name    = targets.pop();
  92.                         }
  93.                         else
  94.                         {
  95.                             targets = [];
  96.                             name    = target;
  97.                         }
  98.                         alert( "targets:"+targets.length+", name:"+name );
  99.                         var root = window;
  100.                         var len  = paths.length;
  101.                         for( var i = 0 ; i < len ; i++ )
  102.                         {
  103.                             root = root[ paths[i] ] ;
  104.                         }
  105.                         var ref   = window;
  106.                         var depth = targets.length;
  107.                         for( var j = 0 ; j < depth ; j++ )
  108.                         {
  109.                             ref = ref[ targets[j] ] ;
  110.                         }
  111.                         root[ prop ] = ref[name] ;
  112.                     }
  113.                 ]]>
  114.             </script>;
  115.        
  116.       
  117.       private var _notAvailableWarning:Boolean = true;
  118.       
  119.       private var _debug:DebugConfiguration;
  120.       
  121.       public function JavascriptProxy(debug:DebugConfiguration)
  122.       {
  123.          super();
  124.          _debug = debug;
  125.       }
  126.       
  127.       public function getProperty(name:String) : *
  128.       {
  129.          return call(name + ".valueOf");
  130.       }
  131.       
  132.       public function hasProperty(path:String) : Boolean
  133.       {
  134.          return call(hasProperty_js,path);
  135.       }
  136.       
  137.       public function setProperty(path:String, value:*) : void
  138.       {
  139.          call(setProperty_js,path,value);
  140.       }
  141.       
  142.       public function executeBlock(data:String) : void
  143.       {
  144.          if(isAvailable())
  145.          {
  146.             try
  147.             {
  148.                ExternalInterface.call(data);
  149.             }
  150.             catch(e:SecurityError)
  151.             {
  152.                if(_debug.javascript)
  153.                {
  154.                   _debug.warning("ExternalInterface is not allowed.\nEnsure that allowScriptAccess is set to \"always\" in the Flash embed HTML.");
  155.                }
  156.             }
  157.             catch(e:Error)
  158.             {
  159.                if(_debug.javascript)
  160.                {
  161.                   _debug.warning("ExternalInterface failed to make the call\nreason: " + e.message);
  162.                }
  163.             }
  164.          }
  165.       }
  166.       
  167.       public function getPropertyString(name:String) : String
  168.       {
  169.          return call(name + ".toString");
  170.       }
  171.       
  172.       public function setPropertyByReference(path:String, target:String) : void
  173.       {
  174.          call(setPropertyRef_js,path,target);
  175.       }
  176.       
  177.       public function call(functionName:String, ... args) : *
  178.       {
  179.          var output:String = null;
  180.          if(isAvailable())
  181.          {
  182.             try
  183.             {
  184.                if(_debug.javascript && _debug.verbose)
  185.                {
  186.                   output = "";
  187.                   output = "Flash->JS: " + functionName;
  188.                   output += "( ";
  189.                   if(args.length > 0)
  190.                   {
  191.                      output += args.join(",");
  192.                   }
  193.                   output += " )";
  194.                   _debug.info(output);
  195.                }
  196.                args.unshift(functionName);
  197.                return ExternalInterface.call.apply(ExternalInterface,args);
  198.             }
  199.             catch(e:SecurityError)
  200.             {
  201.                if(_debug.javascript)
  202.                {
  203.                   _debug.warning("ExternalInterface is not allowed.\nEnsure that allowScriptAccess is set to \"always\" in the Flash embed HTML.");
  204.                }
  205.             }
  206.             catch(e:Error)
  207.             {
  208.                if(_debug.javascript)
  209.                {
  210.                   _debug.warning("ExternalInterface failed to make the call\nreason: " + e.message);
  211.                }
  212.             }
  213.          }
  214.          return null;
  215.       }
  216.       
  217.       public function isAvailable() : Boolean
  218.       {
  219.          var available:Boolean = ExternalInterface.available;
  220.          if(available && Capabilities.playerType == "External")
  221.          {
  222.             available = false;
  223.          }
  224.          if(!available && _debug.javascript && _notAvailableWarning)
  225.          {
  226.             _debug.warning("ExternalInterface is not available.");
  227.             _notAvailableWarning = false;
  228.          }
  229.          return available;
  230.       }
  231.    }
  232. }
  233.